\subsection{BitTorrent}

For at give et komplet billede af hvordan vi udnytter BitTorrent teknologien vil
vi i dette afsnit gennemgå de vigtigste elementer af BitTorrent protokollen.

Hvis en klient vil hente en fil, skal han først have en såkaldt torrent fil som
indeholder en række informationer omkring filen klienten vil hente, samt
hvilke(n) tracker han kan kontakte for at begynde at hente den pågældende fil.
Når klienten kontaker trackeren sender den ham en række kontakt informationer på
andre klienter som også er igang med at hente filen, eller som udbyder filen.
Filen er delt op i små bider (pieces) således at en klient kan hente fra flere
kilder parallelt, informationen om hvor mange bider, hvor store de er samt en
hashing værdi er opbevaret i torrent-filen så biderne kan verificeres.

Efter klienten har modtaget listen af klienter, begynder den at lave et
\emph{handshake} med hver af klienterne for at få deres bitfields. Disse bitfields
repræsentere hvilke dele af filen hver klient har tilrådighed på det pågældende
tidspunkt. Disse bitfields bliver kun sat ved første kontakt mellem de to
klienter. Derefter holdes bitfields'ne opdateret ved \emph{have}-beskeder hvor en
klient holder de andre orienteret om hvilke bider han har fået og som han nu har
mulighed for at sende ud til dem. Efter klienten har fået alle disse
bitfields fra de klienter han er blevet tildelt kan han så begynder at bede om
stykker fra de forskellige klienter. BitTorrent protokollen dikterer at
klienten beder om de bider af filen som er mindst udbredt indenfor den liste af
klienter han har fået fra trackeren.

Dette sikre at de mindst udbredte bider ikke forsvinder helt fra netværket, og
derved gør det umuligt for nogen at hente den komplette fil. Dette kunne ske
såfremt der kun var én klient som havde én bestemt del af filen og at denne
klient så forsvandt fra netværket. Denne strategi er implementeret på klient
siden af ethvert BitTorrent program, hvilket gør det muligt for klienter at
ændre denne strategi til at passe bedre til deres krav. Ændringer af strategien
på stor skala vil naturligvis i værste tilfælde gøre det umuligt for klienter at
hente den komplette fil og derved ødelægge integriteten af systemet.

En klient kan have en række tilstande overfor en anden peer. Disse tilstande
definere hvordan klienten behandler anmodninger fra klienten. En af de tilstande
som en klient kan have overfor en anden peer er den såkaldte \emph{choke} tilstand.
Klienten meddeler derved at den ikke acceptere anmodninger fra peer'en indtil
den er blevet \emph{unchoked} igen. Choke tilstanden rotere hvert tiende sekund hvor
alle choked peers bliver unchoked og omvendt. Derudover bliver der hvert
tredivte sekund udført en optimistisk unchoke, hvor en tilfældig choked peer
bliver unchoked. Formålet med choke tilstanden er at forhindre overbelastning af
peers. En anden tilstand som en klient kan have overfor en anden peer er den såkaldte
\emph{interested} tilstand. Tilstanden fortæller blot den pågældende peer at klienten
er interesseret i én eller flere pieces som peer'en er i besiddelse af.

\todo{tilføj referencer}